const Q = require("qr-image");
// 在context中的this指的就是ctx这个上下文对象
module.exports = {
  // 成功的响应
  success(data = "", status = 200, msg = "ok") {
    this.body = {
      code: status,
      msg,
      data,
    };
    this.status = status;
  },
  // 失败的响应
  fail(data = "", status = 400, msg = "fail") {
    this.body = {
      code: status,
      msg,
      data,
    };
    this.status = status;
  },
  encrypt(data, crypto) {
    // 加密
    const hmac = crypto.createHmac("sha256", "coder_LT"); // 参数表示 加密方式和密钥
    hmac.update(data); // 将加密数据换入缓存中
    return hmac.digest("hex"); // 返回加密后的数据 以16进制的形式返回
  },
  // 生成token
  getToken(value) {
    return this.app.jwt.sign(value, "coder_LT");
  },
  // 验证token
  checkToken(token) {
    // console.log(token);
    return this.app.jwt.verify(token, "coder_LT");
  },
  // 推送消息
  sendMessage(to_id, message, msg = "ok") {
    const { app, service } = this;
    let id = this.authUser.id;
    let socket = app.ws.user[to_id];
    if (!socket) {
      // 对方没在线加入离线缓存  格式为 getmessage_对方id    具体消息
      service.cache.setList(`getmessage_${to_id}`, { message, msg });
    } else {
      // 对方在线将消息发送给对方  并将消息存到自己的聊天记录中去  对方用户id
      // 4.4.2 发送消息
      socket.send(
        JSON.stringify({
          msg: "success",
          data: {
            message,
            msg,
          },
        })
      );
      // 将消息储存到历史记录中  格式为 chatlog_对方用户id_消息类型_当前用户id
      service.cache.setList(`chatlog_${to_id}_${message.chat_type}_${id}`, {
        message,
        msg,
      });
    }
  },
  // 生成二维码
  generateQRCode(data) {
    const image = Q.image(data, { size: 10 });
    this.response.type = "image/png";
    this.body = image;
  },
  // 生成唯一id
  genID(length) {
    return Number(
      Math.random().toString().substr(3, length) + Date.now()
    ).toString(36);
  },
};
